<?

define ('ADD_NEW_EXTERNAL_USER',
	'INSERT INTO `external_users` (`id` ,`login` ,`password`, `email` ,`added` , `realname`, `confirmation_id`) VALUES ( NULL , ?, ?, ?, now(), ?, ? )');
define ('CONFIRM_EMAIL','UPDATE `external_users` SET `enabled` = 1,`confirmed` = 1 WHERE confirmation_id = ?');



class Model_Newuser extends Models_Base {

	function checkInput($args) {

		if(empty($args[new_user_name] )) {
			throw new UserAddException ("Заполните поле 'Логин'");
		}

		if( !empty($args[new_user_name] ) &&(strlen($args[new_user_name] ) < 3 || strlen($args[new_user_name] ) > 20 )) {
			throw new UserAddException ("Длина логина должна быть от 3 до 20 символов");
		}

		if(empty($args[password] )) {
			throw new UserAddException ("Заполните поле 'Пароль'");
		}

		if(!empty($args[password] ) && (strlen($args[password] ) < 3 || strlen($args[password] ) > 20 )) {
			throw new UserAddException ("Длина пароля должна быть от 3 до 20 символов");
		}

		if(empty($args[password2] )) {
			throw new UserAddException ("Повторите пароль");
		}

		if($args[password2] != $args[password] ) {
			throw new UserAddException ("Пароли не совпадают!");	
		}
	
		if(empty($args[email] )) 
			throw new UserAddException ("Заполните поле 'email'");			

		if (!filter_var($args[email], FILTER_VALIDATE_EMAIL))
			throw new UserAddException ("Некорректный email");

	
		if(empty($args[real_name] )) 
			throw new UserAddException ("Заполните поле 'Имя и Фамилия'");			
	}
	
	function addNewUser($args) {
		
		$this->checkInput($args);
		
		$user = new Model_Externaluser($this->registry);
		
		if($user->getUser($args[new_user_name]))
			throw new UserAddException ("Пользователь с именем '$args[new_user_name]' уже существует!");

		if($user->getUserByEmail($args[email]))
			throw new UserAddException ("Пользователь с email '$args[email]' уже существует!");

		$sth = $this->dbh->prepare(ADD_NEW_EXTERNAL_USER);
		
		$confirmation_id = $this->generateConfirmationId($args[new_user_name]);

		$result = $sth->execute(
			array(
				$args[new_user_name],
				md5(md5($args[password])),
				$args[email],
				$args[real_name],
				$confirmation_id,
			)
		);		
	
		return $result ? $confirmation_id : false;
	}
	
	function generateConfirmationId($username) {
		return md5(time.$username);
	}
	
	function confirmNewUser($args) {

		if( empty( $args[code] )) {
			throw new UserConfirmException ("Не указан код активации!");
		}		
		$user = new Model_Externaluser($this->registry);
		
		$result = $user->getUserByCode($args[code]);

		if(empty($result))
			throw new UserConfirmException ("Неверный код активации!");

		if ($result->confirmed)
			throw new UserConfirmException ("Этот код уже использован!");
		
		$sth = $this->dbh->prepare(CONFIRM_EMAIL);
		return $sth->execute(array($args[code]));
	
	}
	

	
}
?>